package org.xm.moretriggercommands;

import org.bukkit.Bukkit;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.logging.Logger;

public class Main extends JavaPlugin implements Listener {
    private static Main instance;

    public static Main getInstance() {
        return instance;
    }
    @Override
    public void onEnable() {
        instance = this;
        CreateConfig();
        verify();


        if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
            Bukkit.getPluginManager().registerEvents(this, this);
        } else {
            throw new RuntimeException("你没有PlaceholderAPI，下载链接https://hangar.papermc.io/HelpChat/PlaceholderAPI");
        }


        EventRegistrar EventRegistrar = new EventRegistrar();
        EventRegistrar.pluginManager();
        getCommand("mtc").setExecutor(new ReloadCommand());
        int pluginId = 17116;
        Metrics metrics = new Metrics(this, pluginId);
        System.out.printf("\n\n");
        System.out.printf("\u001B[32m"+"[MoreTriggerCommands]插件已加载，作者QQ2279881513,\u001B[31m"+"低价"+"\u001B[32m"+"接小型插件定制\u001B[0m\n");
        if (getConfig().getBoolean("update",true)) {
            try {
                String urlStr = "http://webxm.oss-cn-shenzhen.aliyuncs.com/up.txt";
                URL url = new URL(urlStr); // 指定要抓取数据的网页链接
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                con.setRequestMethod("GET");
                con.setRequestProperty("Cache-Control", "no-cache");

                BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String inputLine;
                StringBuffer content = new StringBuffer();
                while ((inputLine = in.readLine()) != null) {
                    content.append(inputLine);
                }
                in.close();

                String v = content.toString();
                String pv = getDescription().getVersion();
                if (!v.equals(pv)) {
                    System.out.printf("\u001B[32m" + "MoreTriggerCommands已更新至 " + "\u001B[31m" + v + "\u001B[32m" + " 版本请及时更新\u001B[0m\n");
                    System.out.printf("\u001B[32m" + "可前往 https://gitee.com/xiaomxiao/MoreTriggerCommands 下载最新版本\u001B[0m\n");
                    System.out.printf("\n\n");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void onDisable() {
        System.out.printf("\n\n");
        System.out.printf("\u001B[32m"+"[MoreTriggerCommands]插件已卸载，作者QQ2279881513,\u001B[31m"+"低价"+"\u001B[32m"+"接小型插件定制\u001B[0m\n");
        System.out.printf("\n\n");
    }

    public void CreateConfig() {
        File dataFolder = getDataFolder();
        File configFile = new File(dataFolder, "config.yml"); // 主配置文件
        File backupConfigFile = new File(dataFolder, "config_backup.yml"); // 备份配置文件

        // 检查插件文件夹是否存在，如果不存在则创建
        if (!dataFolder.exists()) {
            dataFolder.mkdirs();
            //getLogger().info("已创建插件文件夹");
        }

        // 新增：如果主配置文件不存在，则从资源中复制默认配置
        if (!configFile.exists()) {
            try (InputStream in = getResource("config.yml");
                 OutputStream out = new FileOutputStream(configFile)) {

                if (in == null) {
                    getLogger().severe("无法从插件资源中获取默认的 config.yml 文件");
                    return;
                }

                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = in.read(buffer)) != -1) {
                    out.write(buffer, 0, bytesRead);
                }
                //getLogger().info("主配置文件 config.yml 不存在，已创建默认配置");
            } catch (IOException e) {
                getLogger().severe("创建主配置文件 config.yml 时发生错误");
                e.printStackTrace();
                return;
            }
        }

        // 如果备份文件已存在，先删除
        if (backupConfigFile.exists()) {
            if (backupConfigFile.delete()) {
                // 已存在的备份配置文件 config_backup.yml 已删除
                //getLogger().info("已存在的备份配置文件 config_backup.yml 已删除");
            } else {
                getLogger().severe("无法删除已存在的备份配置文件 config_backup.yml");
                return;
            }
        }

        // 定义需要插入的内容
        String[] insertLines = {
                "若要配置插件功能，请修改config,yml配置文件，此文件仅为格式模版，修改无用， 重启重载后会被替换！！！！！！！！！！！！！！",
                "若要配置插件功能，请修改config,yml配置文件，此文件仅为格式模版，修改无用， 重启重载后会被替换！！！！！！！！！！！！！！",
                "若要配置插件功能，请修改config,yml配置文件，此文件仅为格式模版，修改无用， 重启重载后会被替换！！！！！！！！！！！！！！",
                "若要配置插件功能，请修改config,yml配置文件，此文件仅为格式模版，修改无用， 重启重载后会被替换！！！！！！！！！！！！！！",
                "若要配置插件功能，请修改config,yml配置文件，此文件仅为格式模版，修改无用， 重启重载后会被替换！！！！！！！！！！！！！！",
                "若要配置插件功能，请修改config,yml配置文件，此文件仅为格式模版，修改无用， 重启重载后会被替换！！！！！！！！！！！！！！",
                "This file is only a format template. Any modifications are useless and will be overwritten after a restart or reset!",
                "This file is only a format template. Any modifications are useless and will be overwritten after a restart or reset!",
                "This file is only a format template. Any modifications are useless and will be overwritten after a restart or reset!",
                "This file is only a format template. Any modifications are useless and will be overwritten after a restart or reset!",
                "This file is only a format template. Any modifications are useless and will be overwritten after a restart or reset!",
                "This file is only a format template. Any modifications are useless and will be overwritten after a restart or reset!",
                " ",
                " ",
                " ",
                " ",
                " "
        };

        // 从插件资源中获取默认的 config.yml 文件并复制为 config_backup.yml
        try {
            InputStream defaultConfigStream = getResource("config.yml");
            if (defaultConfigStream != null) {
                // 将插入的内容和默认配置文件内容合并
                StringBuilder contentBuilder = new StringBuilder();
                for (String line : insertLines) {
                    contentBuilder.append(line).append("\n");
                }
                try (BufferedReader reader = new BufferedReader(new InputStreamReader(defaultConfigStream, StandardCharsets.UTF_8))) {
                    String line;
                    while ((line = reader.readLine()) != null) {
                        contentBuilder.append(line).append("\n");
                    }
                }

                // 将合并后的内容写入到 config_backup.yml 文件
                try (FileOutputStream fileOutputStream = new FileOutputStream(backupConfigFile)) {
                    fileOutputStream.write(contentBuilder.toString().getBytes(StandardCharsets.UTF_8));
                }
                //getLogger().info("备份配置文件 config_backup.yml 已写入提示");
            } else {
                getLogger().severe("无法从插件资源中获取默认的 config.yml 文件");
            }
        } catch (IOException e) {
            getLogger().severe("创建备份配置文件 config_backup.yml 时发生错误");
            e.printStackTrace();
        }

        // 加载配置文件
        try {
            reloadConfig();
            getLogger().info("MTC插件加载 config 成功");
        } catch (Exception e) {
            e.printStackTrace();
            getLogger().severe("插件无法读取 config");
            getServer().getPluginManager().disablePlugin(this);
        }
    }
    public void verify() {
        // 执行配置验证
        Verify verify = new Verify();
        List<String> errors = verify.validate();

        if (!errors.isEmpty()) {
            Logger logger = getLogger();

            logger.warning("=====================================");
            logger.warning("!!  配置检测结果：发现 " + errors.size() + " 处问题  !!");
            logger.warning("-------------------------------------");

            for (int i = 0; i < errors.size(); i++) {
                logger.warning(String.format("  %d.%s", i + 1, errors.get(i)));
            }

            logger.warning("-------------------------------------");
            logger.warning("修正后输入 /mtc reload 重载插件");
            logger.warning("参考备份文件：config_backup.yml");
            logger.warning("提示：配置错误不影响插件基础功能使用");
            logger.warning("=====================================");

            // 有错误禁止家长插件（
            // getServer().getPluginManager().disablePlugin(this);
        }
    }

}